<h2>DESCRIPTION</h2>

<em>r.univar</em> calculates the univariate statistics of one or several raster
map(s). This includes the number of cells counted, minimum and maximum cell
values, range, arithmetic mean, population variance, standard deviation,
coefficient of variation, and sum. Statistics are calculated separately for every
category/zone found in the <b>zones</b> input map if given.
If the <b>-e</b> extended statistics flag is given the 1st quartile, median,
3rd quartile, and given <b>percentile</b> are calculated.
If the <b>-g</b> flag is given the results are presented in a format suitable
for use in a shell script.
If the <b>-t</b> flag is given the results are presented in tabular format
with the given field separator. The table can immediately be converted to a
vector attribute table which can then be linked to a vector, e.g. the vector
that was rasterized to create the <b>zones</b> input raster.

<p>
When multiple input maps are given to <em>r.univar</em>, the overall statistics
are calculated. This is useful for a time series of the same variable, as well as
for the case of a segmented/tiled dataset. Allowing multiple raster maps to be
specified saves the user from using a temporary raster map for the result of 
<em>r.series</em> or <em>r.patch</em>.

<h2>NOTES</h2>

As with most GRASS raster modules, <em>r.univar</em> operates on the raster
array defined by the current region settings, not the original extent and
resolution of the input map. See <em><a href="g.region.html">g.region</a></em>,
but also 
<a href="https://grasswiki.osgeo.org/wiki/Computational_region#Understanding_the_impact_of_region_settings">
the wiki page on the computational region</a> to understand the impact of the 
region settings on the calculations.

<p>
This module can use large amounts of system memory when the <b>-e</b>
extended statistics flag is used with a very large region setting. If the
region is too large the module should exit gracefully with a memory allocation
error. Basic statistics can be calculated using any size input region.
Extended statistics can be calculated using
<em><a href="r.stats.quantile.html">r.stats.quantile</a></em>.

<p>
Without a <b>zones</b> input raster, the <em>r.quantile</em> module will
be significantly more efficient for calculating percentiles with large maps.

<p>
For calculating univariate statistics from a raster map based on vector polygon
map and uploads statistics to new attribute columns, see
<em><a href="v.rast.stats.html">v.rast.stats</a></em>.

<h2>EXAMPLES</h2>

<h3>Univariate statistics</h3>

In this example, the raster map <tt>elevation</tt> in the North 
Carolina sample dataset is used to calculate univariate statistics: 

<div class="code"><pre>
g.region raster=elevation -p

# standard output, along with extended statistics
r.univar -e elevation percentile=98
total null and non-null cells: 2025000
total null cells: 0

Of the non-null cells:
----------------------
n: 2025000
minimum: 55.5788
maximum: 156.33
range: 100.751
mean: 110.375
mean of absolute values: 110.375
standard deviation: 20.3153
variance: 412.712
variation coefficient: 18.4057 %
sum: 223510266.558102
1st quartile: 94.79
median (even number of cells): 108.88
3rd quartile: 126.792
98th percentile: 147.727


# script style output, along with extended statistics
r.univar -ge elevation percentile=98
n=2025000
null_cells=0
cells=2025000
min=55.5787925720215
max=156.329864501953
range=100.751071929932
mean=110.375440275606
mean_of_abs=110.375440275606
stddev=20.3153233205981
variance=412.712361620436
coeff_var=18.4056555243368
sum=223510266.558102
first_quartile=94.79
median=108.88
third_quartile=126.792
percentile_98=147.727
</pre></div>

<h3>Zonal statistics</h3>
In this example, the raster polygon map <tt>basins</tt> in the North 
Carolina sample dataset is used to calculate raster statistics for zones
for <tt>elevation</tt> raster map: 

<div class="code"><pre>
g.region raster=basins -p
</pre></div>

This will set and print computational region in the format:

<div class="code"><pre>
projection: 99 (Lambert Conformal Conic)
zone:       0
datum:      nad83
ellipsoid:  a=6378137 es=0.006694380022900787
north:      228500
south:      215000
west:       630000
east:       645000
nsres:      10
ewres:      10
rows:       1350
cols:       1500
cells:      2025000
</pre></div>

Check basin's IDs using:

<div class="code"><pre>
r.category basins
</pre></div>

This will print them in the format:

<div class="code"><pre>
2	
4	
6	
8	
10	
12	
14	
16	
18	
20	
22	
24	
26	
28	
30	
</pre></div>

Visualization of them underlying elevation map can be created as:

<div class="code"><pre>
d.mon wx0
d.rast map=elevation
r.colors map=elevation color=grey 
d.rast map=basins
r.colors map=basins color=bgyr 
d.legend raster=basins use=2,4,6,8,10,12,14,16,18,20,22,24,26,28,30
d.barscale 
</pre></div>

<!--
g.region -a n=227228 s=220895 w=631362 e=641170
d.out.file runivar_basins.png 
optipng -o5 runivar_basins.png width=200px
-->


<div align="center" style="margin: 10px">
<a href="runivar_basins.png">
<img src="runivar_basins.png" width="600" height="446" alt="r.univar basins and their IDs" border=0><br>
</a>
<i>Figure: Zones (basins, opacity: 60%) with underlying elevation map 
for North Carolina sample dataset.</i>
</div>

<p>
Then statistics for elevation can be calculated separately for every
zone, i.e. basin found in the <b>zones</b> parameter:

<div class="code"><pre>
r.univar -t map=elevation zones=basins separator=comma \
         output=basin_elev_zonal.csv
</pre></div>

This will print information in the format:

<div class="code"><pre>
zone,label,non_null_cells,null_cells,min,max,range,mean,mean_of_abs,
stddev,variance,coeff_var,sum,sum_abs2,,116975,0,55.5787925720215,
133.147018432617,77.5682258605957,92.1196971445722,92.1196971445722,
15.1475301152556,229.447668592576,16.4433129773355,10775701.5734863,
10775701.57348634,,75480,0,61.7890930175781,110.348838806152,
48.5597457885742,83.7808205765268,83.7808205765268,11.6451777476995,
135.610164775515,13.8995747088232,6323776.33711624,6323776.33711624
6,,1137,0,66.9641571044922,83.2070922851562,16.2429351806641,
73.1900814395257,73.1900814395257,4.15733292896409,17.2834170822492,
5.68018623179036,83217.1225967407,83217.12259674078,,80506,
0,67.4670791625977,147.161514282227, ...
</pre></div>

Comma Separated Values (CSV) file is best viewed through a spreadsheet 
program such as Microsoft Excel, Libre/Open Office Calc or Google Docs:

<div align="center" style="margin: 10px">
<a href="runivar_basins_elev_zonal.png">
<img src="runivar_basins_elev_zonal.png" width="600" height="121" alt="r.univar raster statistics" border=0><br>
</a>
<i>Figure: Raster statistics for zones (basins, North Carolina sample 
dataset) viewed through Libre/Open Office Calc.</i>
</div>

<h2>TODO</h2>

To be implemented <i>mode, skewness, kurtosis</i>.

<h2>SEE ALSO</h2>

<em>
<a href="g.region.html">g.region</a>,
<a href="r3.univar.html">r3.univar</a>,
<a href="r.mode.html">r.mode</a>,
<a href="r.quantile.html">r.quantile</a>,
<a href="r.series.html">r.series</a>,
<a href="r.stats.html">r.stats</a>,
<a href="r.stats.quantile.html">r.stats.quantile</a>,
<a href="r.stats.zonal.html">r.stats.zonal</a>,
<a href="r.statistics.html">r.statistics</a>,
<a href="v.rast.stats.html">v.rast.stats</a>,
<a href="v.univar.html">v.univar</a>
</em>


<h2>AUTHORS</h2>

Hamish Bowman, Otago University, New Zealand<br>
Extended statistics by Martin Landa<br>
Multiple input map support by Ivan Shmakov<br>
Zonal loop by Markus Metz

<!--
<p>
<i>Last changed: $Date$</i>
-->
